]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
appDisplay: Disconnect folder "changed" signal when actors are destroyed
authorJonas Dreßler <verdre@v0yd.nl>
Mon, 17 Feb 2020 14:40:55 +0000 (15:40 +0100)
committerFlorian Müllner <florian.muellner@gmail.com>
Sun, 8 Mar 2020 00:42:40 +0000 (00:42 +0000)
We should disconnect the folders "changed" signal from the folder in
case the FolderView or FolderIcon is destroyed. While at it, also remove
the unused this._spaceReadySignalId of FolderIcon.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1011

js/ui/appDisplay.js

index 042598ddcf7e0b06c7fcd4c1d635362aa23ea7a2..3d0bea97b3c000a5886ba6645498d029e598daf2 100644 (file)
@@ -1324,10 +1324,20 @@ class FolderView extends BaseAppView {
         action.connect('pan', this._onPan.bind(this));
         this._scrollView.add_action(action);
 
-        this._folder.connect('changed', this._redisplay.bind(this));
+        this.connect('destroy', this._onDestroy.bind(this));
+
+        this._folderChangedId = this._folder.connect(
+            'changed', this._redisplay.bind(this));
         this._redisplay();
     }
 
+    _onDestroy() {
+        if (this._folderChangedId) {
+            this._folder.disconnect(this._folderChangedId);
+            delete this._folderChangedId;
+        }
+    }
+
     _childFocused(actor) {
         Util.ensureActorVisibleInScrollView(this._scrollView, actor);
     }
@@ -1515,7 +1525,8 @@ var FolderIcon = GObject.registerClass({
 
         this.connect('destroy', this._onDestroy.bind(this));
 
-        this._folder.connect('changed', this._sync.bind(this));
+        this._folderChangedId = this._folder.connect(
+            'changed', this._sync.bind(this));
         this._sync();
     }
 
@@ -1525,9 +1536,9 @@ var FolderIcon = GObject.registerClass({
 
         this.view.destroy();
 
-        if (this._spaceReadySignalId) {
-            this._parentView.disconnect(this._spaceReadySignalId);
-            this._spaceReadySignalId = 0;
+        if (this._folderChangedId) {
+            this._folder.disconnect(this._folderChangedId);
+            delete this._folderChangedId;
         }
 
         if (this._dialog)